#ifndef BODY_H_
#define BODY_H_

#include "userconfig.h"

namespace physicsworks {

enum BodyState {
	Inactive,
	Frozen,
	Dynamic	
};

class Body {
public:
	Body() {}
	virtual ~Body() {}
	virtual int getId() = 0;
	virtual void setName(const char* name) = 0;
	virtual const char* getName() const = 0;
	virtual void setMass(real m) = 0;
	virtual real getMass() const = 0;
	virtual void setGravityCenter(real cX, real cY, real cZ) = 0;
	virtual real* getGravityCenter() const = 0;
	virtual void setInertiaTensor(const real* t) = 0;
	virtual real* getInertiaTensor() const = 0;
	virtual void setState(BodyState s) = 0;
	virtual BodyState getState() const = 0;
	virtual void setPosition(real pX, real pY, real pZ) = 0;
	virtual real* getPosition() const = 0;
	virtual void setOrientation(const real* o) = 0;
	virtual real* getOrientation() const = 0;
	virtual void setRestitution(real r) = 0;
	virtual real getRestitution() const = 0;
	virtual void setDynamicFriction(real df) = 0;
	virtual real getDynamicFriction() const = 0;
	virtual void addForce(real fX, real fY, real fZ, real pX, real pY, real pZ) = 0;
	virtual void addForce(real fX, real fY, real fZ) = 0;
	virtual Body* clone() const = 0;

private:
	Body(const Body*);
	Body& operator = (const Body*);
};

}

#endif /*BODY_H_*/
